iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 20

Day 20 KubeEdge Pod親和性(II)

  • 分享至 

  • xImage
  •  

延續昨天的內容,今天我們要測試的是pod親和性佈署中的SoftMode模式。
如同之前所說的,SoftMode和HardMode最大的不同是前者參考YAML檔中的邏輯判斷式選擇積分最高的節點作為服務指派節點;而Pod Affinity代表依照節點上的Pod環境作為依據。

開始之前一樣放上我的節點狀態,方便辨認那些節點是透過KubeEdge規則加進來的那些是透過Kubernetes加入叢集的:

參數說明

底下是我們用到的YAML檔,接著對參數部分作對照:

# soft-podaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
  name: soft-podaffinity
  labels:
    app: soft-podaff
spec:
  affinity:
    podAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - target
          topologyKey: kubernetes.io/hostname
  containers:
  - name: nginx
    image: nginx:stable
    ports:
    - containerPort: 80

格式和前幾天提到的Node Affinity SoftMode類似,可以參考我前幾天發過的文章

佈署

接著在佈署之前,我們先營造Pod環境。這裡我們將busybox透過nodeSelector的方式讓他運行到edge節點上。

# busybox-podaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
  labels:
    app: target
spec:
  containers:
  - image: busybox:latest
    name: busybox
    command:
    - "sleep"
    - "3600"
  nodeSelector:
    name: edge

在這裡的YAML檔可以看到labels欄位中的app: target,就是Pod身上附帶的標籤(label)。

kubectl apply -f busybox-podaffinity.yaml

# 檢查佈署狀態
kubectl get pods -o wide

接著佈署soft-podaffinity.yaml

kubectl apply -f soft-podaffinity.yaml

# 查看佈署狀態
kubectl get pods -o wide


可以發現NGINX和busybox被佈署在相同節點上(edge)。

同樣我們也可以在Kubernetes節點上試一次。
先把剛剛佈署的服務砍掉:

kubectl delete -f busybox-podaffinity.yaml 
kubectl delete -f soft-podaffinity.yaml

稍微修改一下busybox-podaffinity.yaml,改成將busybox佈署到k8s-node02節點上:

# busybox-podaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
  labels:
    app: target
spec:
  containers:
  - image: busybox:latest
    name: busybox
    command:
    - "sleep"
    - "3600"
  nodeSelector:
    name: k8s-node02
#再次佈署服務
kubectl apply -f busybox-podaffinity.yaml

# 確定服務佈署狀態
kubectl get pods -o wide

kubectl apply -f soft-podaffinity.yaml
kubectl get pods -o wide


可以看到兩個服務同樣都被佈署到k8s-node02上。

接著測試如果叢集中不存在app=target這個標籤的Pod:

# 將服務清掉
kubectl delete -f soft-podaffinity.yaml
kubectl delete -f busybox-podaffinity.yaml
# 直接佈署soft-podaffinity.yaml
kubectl apply -f soft-podaffinity.yaml

kubectl get pods -o wide


由於k8s-node02節點資源較多,因此選擇將服務運行在該節點上。


上一篇
Day 19 KubeEdge Pod親和性(I)
下一篇
Day 21 KubeEdge 斷線測試
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言